<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script src="../js/promise_ajax.js"></script>

    <script>


        // Promise.all([])   参数是一个数组，数组中的值必须是promise实例
        //    只有所有的实例的结果都是成功的  则返回数组(按照顺序排列)
        //    只要出现了失败，那么第一个失败的就会作为最终的结果 ， 后面的实例是否成功无法判断



        // 最终解决地狱回调的问题
        //    Promise.all([])     确认所有结果一定是成功的  
        //    链式调用     所有的实例有可能成功有可能失败     ---- 可以知道每一个实例的结果




        // const p1 = ajax('get', '../php/1.php')

        // const p2 = ajax('get', '../php/2.php')

        // const p3 = ajax('get', '../php/3.php')


        // // Promise.all([])   参数是一个数组，数组中的值必须是promise实例

        // //    把多个promise实例成功的结果按照顺序存在数组中


        // const res = Promise.all([p1, p2, p3]);
        // console.log(res);


        // res.then(res => {
        //     console.log(res);
        // })





        // 当遇到第一个失败的时候，就直接返回失败的结果(把第一个失败的结果作为最终的结果)
        //   后的promise是否成功无法得知


        const pp1 = new Promise((resolve, reject) => {
            setTimeout(() => {
                const n = parseInt(Math.random() * 100);
                n % 2 ? resolve(n) : reject(n + '第一次失败');
            })
        })

        const pp2 = new Promise((resolve, reject) => {
            setTimeout(() => {
                const n = parseInt(Math.random() * 100);
                n % 2 ? resolve(n) : reject(n + '第2次失败');
            })
        })

        const pp3 = new Promise((resolve, reject) => {
            setTimeout(() => {
                const n = parseInt(Math.random() * 100);
                n % 2 ? resolve(n) : reject(n + '第3次失败');
            })
        })


        // const pp = Promise.all([pp1, pp2, pp3]);
        // console.log(pp);


        //
        pp1.then(
            res => {
                console.log(res);
                return pp2;
            },
            err => {
                console.log(err);
                return pp2;
            }
        ).then(
            res => {
                console.log(res);
                return pp3;
            },
            err => {
                console.log(err);
                return pp3;
            }
        ).then(
            res => {
                console.log(res);
            },
            err => {
                console.log(err);
            }
        )




    </script>

</body>

</html>